#ifndef ITERATOR_H
#define ITERATOR_H

/**
 * \namespace bga
 * \brief API namespace
 */
namespace bga
{
/*!
 * \class Iterator
 * \brief This class defines an Iterator on a container
 *
 * This abstract class defines an Iterator on a container. It defines all the needed behaviour to iterate on a container.
 */
template< typename T >
class Iterator
{
	public:
        /**
         * Default constructor
         */
		Iterator(){};

		/**
		 * Destructor
		 */
		virtual ~Iterator(){};

        /**
         * \brief to determine if an element remains int the container
         */
		virtual bool hasNext() = 0;

		/**
		 * \brief to get the next element in the container
		 */
		virtual T* next() = 0;
	protected:

	private:

};

}

#endif // ITERATOR_H

